package com.skyz.wrap.bean;

import com.google.gson.Gson;

import java.util.Map;

public class AlipayResult {
    String memo;
    String resultStatus;
    String result;

    public PayResponse getPayResponse(){
        ResultData data = new Gson().fromJson(result,ResultData.class);
        if (data==null){
            return null;
        }
       return data.alipay_trade_app_pay_response;
    }


    /**
     * 支付结果map转对象
     * @param map
     * @return
     */
    public static AlipayResult formMap(Map<String, String> map) {
        AlipayResult result = new AlipayResult();
        result.memo = map.get("memo");
        result.resultStatus = map.get("resultStatus");
        result.result = map.get("result");
        return result;
    }

    /**
     * 是否支付成功
     * @return
     */
    public boolean isSuc(){
        return resultStatus!=null&&"9000".equals(resultStatus);
    }

    /**
     * 是否支付成功
     * @return
     */
    public boolean isSavePayStatu(){
        return resultStatus!=null&&("9000".equals(resultStatus)||"6004".equals(resultStatus)||"8000".equals(resultStatus));
    }

    /**
     * 获取支付code信息
     * @return
     */
    public String getResultStatusMsg(){
        if (resultStatus==null){
            return "支付数据异常";
        }
        if ("9000".equals(resultStatus)){
            return "订单支付成功";
        }
        if ("8000".equals(resultStatus)){
            return "正在处理中，支付结果未知";
        }
        if ("4000".equals(resultStatus)){
            return "订单支付失败";
        }
        if ("5000".equals(resultStatus)){
            return "重复请求";
        }
        if ("6001".equals(resultStatus)){
            return "用户中途取消";
        }
        if ("6002".equals(resultStatus)){
            return "网络连接出错";
        }
        if ("6004".equals(resultStatus)){
            return "支付结果未知（有可能已经支付成功）";
        }
        return "其它支付错误";
    }



    public class ResultData{
        PayResponse alipay_trade_app_pay_response;
        String sign;
        String sign_type;

    }
    public class PayResponse{
        String code;
        /**
         * 处理结果的描述，信息来自于 code 返回结果的描述。
         */
        String msg;
        String app_id;
        /**
         * 商家网站唯一订单号
         */
        String out_trade_no;
        /**
         * 该交易在支付宝系统中的交易流水号。最长 64 位。
         */
        String trade_no;
        /**
         * 该笔订单的资金总额
         */
        String total_amount;
        /**
         * 收款支付宝账号对应的支付宝唯一用户号。以 2088 开头的纯 16 位数字
         */
        String seller_id;
        String charset;
        String timestamp;

        /**
         * 接口是否调用成功
         * @return
         */
        public boolean isSuc(){
            return code!=null&&"10000".equals(code);
        }
        public String getMSgByCode(){
            if (code==null){
                return "支付失败";
            }
            if ("10000".equals(code)){
                return "调用成功";
            }
            if ("20000".equals(code)){
                return "服务不可用";
            }
            if ("20001".equals(code)){
                return "权限不足";
            }
            if ("40001".equals(code)){
                return "缺少必选参数";
            }
            if ("40002".equals(code)){
                return "非法参数";
            }
            if ("40003".equals(code)){
                return "无效的授权关系或者验签出错，未配置对应签名算法的公钥或者证书。";
            }
            if ("40004".equals(code)){
                return "业务处理失败";
            }
            if ("40005".equals(code)){
                return "应用调用次数超限，包含调用频率超限";
            }
            if ("40006".equals(code)){
                return "ISV权限或者用户权限不足";
            }
            return "其他错误";
        }

    }


}
